home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / mcu / devb-114.arc / DEVB-114.LST < prev   
File List  |  1991-09-02  |  32KB  |  652 lines

  1.  
  2. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  1
  3.  
  4.  
  5.  
  6.                                   #pragma option v ;
  7.                                   /*
  8.  
  9.                                   rev 1.1 code rewritten to use the MC68HC705B5 instead of the
  10.                                   MC68HC805B6.   WLL 6/17/91
  11.  
  12.                                   THE FOLLOWING 'C' SOURCE CODE IS WRITTEN FOR THE DEVB-114 DEMONSTRATION
  13.                                   BOARD. IT WAS COMPILED WITH A COMPILER COURTESY OF:
  14.  
  15.                                                   BYTE CRAFT LTD.
  16.                                                   421 KING ST.
  17.                                                   WATERLOO, ONTARIO
  18.                                                   CANADA  N2J 4E4
  19.                                                   (519)888-6911                   
  20.  
  21.                                    SOME SOURCE CODE CHANGES MAY BE NECESSARY FOR COMPILATION WITH OTHER
  22.                                    COMPILERS.
  23.                                                                  BILL LUCAS 8/5/90
  24.                                                                  MOTOROLA, SPS            */
  25.  
  26. 0800 1700                         #pragma memory ROMPROG  [5888]  @ 0x0800 ;
  27. 0050 0096                         #pragma memory RAMPAGE0 [150]   @ 0x0050 ;
  28.  
  29.                                   /*       Vector assignments    */
  30. 1FFE                              #pragma vector __RESET   @ 0x1ffe ;
  31. 1FFC                              #pragma vector __SWI     @ 0x1ffc ;
  32. 1FFA                              #pragma vector IRQ       @ 0x1ffa ;
  33. 1FF8                              #pragma vector TIMERCAP  @ 0x1ff8 ;
  34. 1FF6                              #pragma vector TIMERCMP  @ 0x1ff6 ;
  35. 1FF4                              #pragma vector TIMEROV   @ 0x1ff4 ;
  36. 1FF2                              #pragma vector SCI       @ 0x1ff2 ;
  37.  
  38.                                   #pragma has STOP ;
  39.                                   #pragma has WAIT ;
  40.                                   #pragma has MUL ;
  41.  
  42.                                   /*       Register assignments for the 68HC705B5 microcontroller     */
  43. 0000                              #pragma portrw porta   @ 0x00;  /*                                           */
  44. 0001                              #pragma portrw portb   @ 0x01;  /*                                           */
  45. 0002                              #pragma portrw portc   @ 0x02;  /*                                           */
  46. 0003                              #pragma portrw portd   @ 0x03;  /* in  ,-    ,SS   ,SCK  ,MOSI ,MISO,TxD,RxD */
  47. 0004                              #pragma portrw ddra    @ 0x04;  /* Data direction, Port A                    */
  48. 0005                              #pragma portrw ddrb    @ 0x05;  /* Data direction, Port B                    */
  49. 0006                              #pragma portrw ddrc    @ 0x06;  /* Data direction, Port C (all output)       */
  50. 0007                              #pragma portrw eeclk   @ 0x07;  /* eeprom/eclk cntl */
  51. 0008                              #pragma portrw addata  @ 0x08;  /* a/d data register */
  52. 0009                              #pragma portrw adstat  @ 0x09;  /* a/d stat/control */
  53. 000A                              #pragma portrw plma    @ 0x0a;  /* pulse length modulation a */
  54. 000B                              #pragma portrw plmb    @ 0x0b;  /* pulse length modulation b */
  55. 000C                              #pragma portrw misc    @ 0x0c;  /* miscellaneous register */
  56. 000D                              #pragma portrw scibaud @ 0x0d;  /* sci baud rate register */
  57. 000E                              #pragma portrw scicntl1 @ 0x0e; /* sci control 1  */
  58. 000F                              #pragma portrw scicntl2 @ 0x0f; /* sci control 2  */
  59. 0010                              #pragma portrw scistat @ 0x10;  /* sci status reg */
  60.  
  61. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  2
  62.  
  63.  
  64. 0011                              #pragma portrw scidata   @ 0x11;  /* SCI Data  */
  65. 0012                              #pragma portrw tcr       @ 0x12;  /* ICIE,OCIE,TOIE,0;0,0,IEGE,OLVL         */
  66. 0013                              #pragma portrw tsr       @ 0x13;  /* ICF,OCF,TOF,0; 0,0,0,0                 */
  67. 0014                              #pragma portrw icaphi1   @ 0x14;  /* Input Capture Reg (Hi-0x14, Lo-0x15)   */
  68. 0015                              #pragma portrw icaplo1   @ 0x15;  /* Input Capture Reg (Hi-0x14, Lo-0x15)   */
  69. 0016                              #pragma portrw ocmphi1   @ 0x16;  /* Output Compare Reg (Hi-0x16, Lo-0x17)  */
  70. 0017                              #pragma portrw ocmplo1   @ 0x17;  /* Output Compare Reg (Hi-0x16, Lo-0x17)  */
  71. 0018                              #pragma portrw tcnthi    @ 0x18;  /* Timer Count Reg (Hi-0x18, Lo-0x19)     */
  72. 0019                              #pragma portrw tcntlo    @ 0x19;  /* Timer Count Reg (Hi-0x18, Lo-0x19)     */
  73. 001A                              #pragma portrw acnthi    @ 0x1A;  /* Alternate Count Reg (Hi-$1A, Lo-$1B)   */
  74. 001B                              #pragma portrw acntlo    @ 0x1B;  /* Alternate Count Reg (Hi-$1A, Lo-$1B)   */
  75. 001C                              #pragma portrw icaphi2   @ 0x1c;  /* Input Capture Reg (Hi-0x1c, Lo-0x1d)   */
  76. 001D                              #pragma portrw icaplo2   @ 0x1d;  /* Input Capture Reg (Hi-0x1c, Lo-0x1d)   */
  77. 001E                              #pragma portrw ocmphi2   @ 0x1e;  /* Output Compare Reg (Hi-0x1e, Lo-0x1f)  */
  78. 001F                              #pragma portrw ocmplo2   @ 0x1f;  /* Output Compare Reg (Hi-0x1e, Lo-0x1f)  */
  79.  
  80.                                       /* put constants and variables here...they must be global */
  81.                                   /***************************************************************************/
  82. 01FE F4                           #pragma mor @ 0x01fe = 0xf4; /* this disables the watchdog counter and does not
  83.                                                                   add pull-down resistors on ports B and C */
  84.  
  85. 0800 FC 30 DA 7A 36 6E E6 38 FE   const char lcdtab[]={0xfc,0x30,0xda,0x7a,0x36,0x6e,0xe6,0x38,0xfe,0x3e };
  86. 0809 3E                           
  87.                                   /* lcd pattern table  0    1    2    3    4    5    6    7    8    9     */
  88.  
  89. 080A 27 10 03 E8 00 64 00 0A      const long dectable[] = { 10000, 1000, 100, 10 };
  90.  
  91. 0050 0005                         unsigned int digit[5]; /* buffer to hold results from cvt_bin_dec function */
  92.  
  93. 0000                              registera ac;      /* processor's A register */
  94.  
  95. 0055                              long atodtemp;     /* temp to accumulate 100 a/d readings for smoothing */
  96.                                   
  97.  
  98. 0059                              long slope;        /* multiplier for adc to engineering units conversion */
  99.  
  100. 005B                              int adcnt;         /* a/d converter loop counter */
  101.  
  102. 005C                              long xdcr_offset;  /* initial xdcr offset */
  103.  
  104. 005E 0060                         unsigned long i,j; /* counter for loops */
  105.  
  106. 0062                              int k;             /* misc variable */
  107.  
  108.                                   struct bothbytes
  109.                                      {  int hi;
  110.                                         int lo;
  111.                                      };
  112.                                       
  113.                                      union isboth
  114.                                           {  long  l;
  115.                                            struct bothbytes b;
  116.                                           };
  117.  
  118. 0063 0002                                 union isboth q;  /* used for timer set-up */
  119.  
  120. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  3
  121.  
  122.  
  123.  
  124.                                   /***************************************************************************/
  125.                                                /* code starts here */
  126.                                   /***************************************************************************/
  127.                                   /* these interrupts are not used...give them a graceful return if for
  128.                                      some reason one occurs */
  129.  
  130. 1FFC 08 12                        __SWI(){}
  131. 0812 80        RTI                
  132. 1FFA 08 13                        IRQ(){}
  133. 0813 80        RTI                
  134. 1FF8 08 14                        TIMERCAP(){}
  135. 0814 80        RTI                
  136. 1FF4 08 15                        TIMEROV(){}
  137. 0815 80        RTI                
  138. 1FF2 08 16                        SCI(){}
  139. 0816 80        RTI                
  140.  
  141.                                   /***************************************************************************/
  142.  
  143.                                   void delay(void)  /* just hang around for a while */
  144.                                   {
  145. 0817 4F        CLRA               for (i=0; i<20000; ++i);
  146. 0818 3F 57     CLR    $57         
  147. 081A B7 58     STA    $58         
  148. 081C B6 57     LDA    $57         
  149. 081E B7 5E     STA    $5E         
  150. 0820 B6 58     LDA    $58         
  151. 0822 B7 5F     STA    $5F         
  152. 0824 B6 5F     LDA    $5F         
  153. 0826 A0 20     SUB    #$20        
  154. 0828 B6 5E     LDA    $5E         
  155. 082A A2 4E     SBC    #$4E        
  156. 082C 24 08     BCC    $0836       
  157. 082E 3C 5F     INC    $5F         
  158. 0830 26 02     BNE    $0834       
  159. 0832 3C 5E     INC    $5E         
  160. 0834 20 EE     BRA    $0824       
  161. 0836 81        RTS                }
  162.  
  163.                                   /***************************************************************************/
  164.  
  165.                                   read_a2d(void)
  166.                                   {
  167.                                   /* read the a/d converter on channel 5 and accumulate the result
  168.                                      in atodtemp */
  169.  
  170. 0837 3F 56     CLR    $56         atodtemp=0;   /* zero for accumulation */
  171. 0839 3F 55     CLR    $55         
  172. 083B 4F        CLRA                  for ( adcnt = 0 ; adcnt<100; ++adcnt) /* do 100 a/d conversions */
  173. 083C B7 5B     STA    $5B         
  174. 083E B6 5B     LDA    $5B         
  175. 0840 A8 80     EOR    #$80        
  176. 0842 A1 E4     CMP    #$E4        
  177. 0844 24 21     BCC    $0867       
  178.  
  179. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  4
  180.  
  181.  
  182.                                        {
  183. 0846 A6 25     LDA    #$25                adstat = 0x25;  /* convert on channel 5 */
  184. 0848 B7 09     STA    $09         
  185. 084A 0F 09 FD  BRCLR 7,$09,$084A          while (!(adstat & 0x80));  /* wait for a/d to complete */
  186. 084D B6 08     LDA    $08                 atodtemp = addata + atodtemp;
  187. 084F 3F 57     CLR    $57         
  188. 0851 B7 58     STA    $58         
  189. 0853 BB 56     ADD    $56         
  190. 0855 B7 58     STA    $58         
  191. 0857 B6 57     LDA    $57         
  192. 0859 B9 55     ADC    $55         
  193. 085B B7 57     STA    $57         
  194. 085D B7 55     STA    $55         
  195. 085F B6 58     LDA    $58         
  196. 0861 B7 56     STA    $56         
  197.                                        }
  198. 0863 3C 5B     INC    $5B         
  199. 0865 20 D7     BRA    $083E       
  200. 0867 B6 56     LDA    $56            atodtemp = atodtemp/100;
  201. 0869 B7 58     STA    $58         
  202. 086B B6 55     LDA    $55         
  203. 086D B7 57     STA    $57         
  204. 086F 3F 66     CLR    $66         
  205. 0871 A6 64     LDA    #$64        
  206. 0873 B7 67     STA    $67         
  207. 0875 CD 0A 5E  JSR    $0A5E       
  208. 0878 CD 0A 8F  JSR    $0A8F       
  209. 087B BF 55     STX    $55         
  210. 087D B7 56     STA    $56         
  211. 087F 81        RTS                  return atodtemp;
  212.                                   }
  213.  
  214.                                   /***************************************************************************/
  215.  
  216.                                   void fixcompare (void)  /* sets-up the timer compare for the next interrupt */
  217.                                     {
  218. 0880 B6 18     LDA    $18            q.b.hi =tcnthi;
  219. 0882 B7 63     STA    $63         
  220. 0884 B6 19     LDA    $19            q.b.lo = tcntlo;
  221. 0886 B7 64     STA    $64         
  222. 0888 AB 4C     ADD    #$4C           q.l +=7500;  /* ((4mhz xtal/2)/4) = counter period = 2us.*7500 = 15ms. */
  223. 088A B7 64     STA    $64         
  224. 088C B6 63     LDA    $63         
  225. 088E A9 1D     ADC    #$1D        
  226. 0890 B7 63     STA    $63         
  227. 0892 B7 16     STA    $16            ocmphi1 = q.b.hi;
  228. 0894 B6 13     LDA    $13            ac=tsr;
  229. 0896 B6 64     LDA    $64            ocmplo1 = q.b.lo;
  230. 0898 B7 17     STA    $17         
  231. 089A 81        RTS                   }
  232.  
  233.                                   /***************************************************************************/
  234.  
  235.                                   void TIMERCMP (void)               /* timer service module */
  236. 1FF6 08 9B                          {
  237.  
  238. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  5
  239.  
  240.  
  241. 089B 33 02     COM    $02               portc =~ portc;       /* service the lcd */
  242. 089D 33 01     COM    $01               portb =~ portb;
  243. 089F 33 00     COM    $00               porta =~ porta;
  244. 08A1 AD DD     BSR    $0880             fixcompare();
  245. 08A3 80        RTI                  }
  246.  
  247.                                   /***************************************************************************/
  248.  
  249.                                   void adzero(void)  /* called by initio() to save initial xdcr's zero
  250.                                                         pressure offset voltage output */
  251.                                   {
  252.  
  253. 08A4 4F        CLRA                 for ( j=0; j<20; ++j)  /* give the sensor time to "warm-up" and the
  254. 08A5 3F 57     CLR    $57         
  255. 08A7 B7 58     STA    $58         
  256. 08A9 B6 57     LDA    $57         
  257. 08AB B7 60     STA    $60         
  258. 08AD B6 58     LDA    $58         
  259. 08AF B7 61     STA    $61         
  260. 08B1 B6 61     LDA    $61         
  261. 08B3 A0 14     SUB    #$14        
  262. 08B5 B6 60     LDA    $60         
  263. 08B7 A2 00     SBC    #$00        
  264. 08B9 24 0B     BCC    $08C6       
  265.                                                               power supply time to settle down */
  266.                                      {
  267. 08BB CD 08 17  JSR    $0817            delay();
  268.                                      }
  269. 08BE 3C 61     INC    $61         
  270. 08C0 26 02     BNE    $08C4       
  271. 08C2 3C 60     INC    $60         
  272. 08C4 20 EB     BRA    $08B1       
  273. 08C6 CD 08 37  JSR    $0837             xdcr_offset =  read_a2d();
  274. 08C9 3F 5C     CLR    $5C         
  275. 08CB B7 5D     STA    $5D         
  276. 08CD 81        RTS                }
  277.  
  278.                                   /***************************************************************************/
  279.  
  280.                                   void initio (void)     /*  setup the I/O */
  281.                                     {
  282. 08CE A6 20     LDA    #$20            adstat = 0x20; /* power-up the A/D */
  283. 08D0 B7 09     STA    $09         
  284. 08D2 3F 02     CLR    $02             porta = portb = portc = 0;
  285. 08D4 3F 01     CLR    $01         
  286. 08D6 3F 00     CLR    $00         
  287. 08D8 A6 FF     LDA    #$FF            ddra = ddrb = ddrc = 0xff;
  288. 08DA B7 06     STA    $06         
  289. 08DC B7 05     STA    $05         
  290. 08DE B7 04     STA    $04         
  291. 08E0 B6 13     LDA    $13             ac=tsr;  /* dummy read */
  292. 08E2 3F 1E     CLR    $1E             ocmphi1 = ocmphi2 = 0;
  293. 08E4 3F 16     CLR    $16         
  294. 08E6 B6 1F     LDA    $1F             ac = ocmplo2; /* clear out output compare 2 if it happens to be set */
  295. 08E8 AD 96     BSR    $0880           fixcompare(); /* set-up for the first timer interrupt */
  296.  
  297. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  6
  298.  
  299.  
  300. 08EA A6 40     LDA    #$40            tcr = 0x40;
  301. 08EC B7 12     STA    $12         
  302. 08EE 9A        CLI                    CLI;  /* let the interrupts begin !  */
  303.                                   /* write CAL to the display */
  304. 08EF A6 CC     LDA    #$CC            portc = 0xcc; /* C */
  305. 08F1 B7 02     STA    $02         
  306. 08F3 A6 BE     LDA    #$BE            portb = 0xbe; /* A */
  307. 08F5 B7 01     STA    $01         
  308. 08F7 A6 C4     LDA    #$C4            porta = 0xc4; /* L */
  309. 08F9 B7 00     STA    $00         
  310. 08FB AD A7     BSR    $08A4           adzero();
  311. 08FD 81        RTS                   }
  312.  
  313.                                   /***************************************************************************/
  314.                                   void cvt_bin_dec(unsigned long arg)
  315.  
  316.                                   /* First converts the argument to a five digit decimal value. The msd is in
  317.                                   the lowest address. Then leading zero suppresses the value and writes it to
  318.                                   the display ports.
  319.                                      The argument value range is 0..65535 decimal. */
  320.  
  321. 0069                              {
  322. 08FE BF 69     STX    $69         
  323. 0900 B7 6A     STA    $6A         
  324. 006B                              char i;
  325. 006C                              unsigned long l;
  326. 0902 4F        CLRA                 for ( i=0; i < 5; ++i )
  327. 0903 B7 6B     STA    $6B         
  328. 0905 B6 6B     LDA    $6B         
  329. 0907 A1 05     CMP    #$05        
  330. 0909 24 07     BCC    $0912       
  331.                                       {
  332. 090B 97        TAX                      digit[i] = 0x0;  /* put blanks in all digit positions */
  333. 090C 6F 50     CLR    $50,X      
  334.                                       }
  335. 090E 3C 6B     INC    $6B         
  336. 0910 20 F3     BRA    $0905       
  337. 0912 4F        CLRA                      for ( i=0; i < 4; ++i )
  338. 0913 B7 6B     STA    $6B         
  339. 0915 B6 6B     LDA    $6B         
  340. 0917 A1 04     CMP    #$04        
  341. 0919 24 70     BCC    $098B       
  342.                                            {
  343. 091B 97        TAX                             if ( arg  >= dectable [i] )
  344. 091C 58        LSLX               
  345. 091D D6 08 0B  LDA    $080B,X     
  346. 0920 B1 6A     CMP    $6A         
  347. 0922 26 07     BNE    $092B       
  348. 0924 D6 08 0A  LDA    $080A,X     
  349. 0927 B1 69     CMP    $69         
  350. 0929 27 5C     BEQ    $0987       
  351.                                                  {
  352. 092B BE 6B     LDX    $6B                          l = dectable[i];
  353. 092D 58        LSLX               
  354. 092E D6 08 0A  LDA    $080A,X     
  355.  
  356. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  7
  357.  
  358.  
  359. 0931 B7 6C     STA    $6C         
  360. 0933 D6 08 0B  LDA    $080B,X     
  361. 0936 B7 6D     STA    $6D         
  362. 0938 B6 6A     LDA    $6A                          digit[i] = arg / l;
  363. 093A B7 58     STA    $58         
  364. 093C B6 69     LDA    $69         
  365. 093E B7 57     STA    $57         
  366. 0940 B6 6C     LDA    $6C         
  367. 0942 B7 66     STA    $66         
  368. 0944 B6 6D     LDA    $6D         
  369. 0946 B7 67     STA    $67         
  370. 0948 CD 0A 5E  JSR    $0A5E       
  371. 094B CD 0A 8F  JSR    $0A8F       
  372. 094E BF 57     STX    $57         
  373. 0950 B7 58     STA    $58         
  374. 0952 BE 6B     LDX    $6B         
  375. 0954 E7 50     STA    $50,X       
  376. 0956 BE 6B     LDX    $6B                          arg = arg-(digit[i] * l);
  377. 0958 E6 50     LDA    $50,X       
  378. 095A 3F 57     CLR    $57         
  379. 095C B7 58     STA    $58         
  380. 095E B6 6C     LDA    $6C         
  381. 0960 B7 66     STA    $66         
  382. 0962 B6 6D     LDA    $6D         
  383. 0964 B7 67     STA    $67         
  384. 0966 CD 0A 3F  JSR    $0A3F       
  385. 0969 BF 57     STX    $57         
  386. 096B B7 58     STA    $58         
  387. 096D 33 57     COM    $57         
  388. 096F 30 58     NEG    $58         
  389. 0971 26 02     BNE    $0975       
  390. 0973 3C 57     INC    $57         
  391. 0975 B6 58     LDA    $58         
  392. 0977 BB 6A     ADD    $6A         
  393. 0979 B7 58     STA    $58         
  394. 097B B6 57     LDA    $57         
  395. 097D B9 69     ADC    $69         
  396. 097F B7 57     STA    $57         
  397. 0981 B7 69     STA    $69         
  398. 0983 B6 58     LDA    $58         
  399. 0985 B7 6A     STA    $6A         
  400.                                                  }
  401.                                             }
  402. 0987 3C 6B     INC    $6B         
  403. 0989 20 8A     BRA    $0915       
  404. 098B B6 6A     LDA    $6A         digit[i] = arg;
  405. 098D B7 58     STA    $58         
  406. 098F B6 69     LDA    $69         
  407. 0991 B7 57     STA    $57         
  408. 0993 BE 6B     LDX    $6B         
  409. 0995 B6 58     LDA    $58         
  410. 0997 E7 50     STA    $50,X       
  411.  
  412.                                   /* now zero suppress and send the lcd pattern to the display */
  413. 0999 9B        SEI                SEI;
  414.  
  415. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  8
  416.  
  417.  
  418. 099A 3D 50     TST    $50         if ( digit[0] == 0 )   /* leading zero suppression */
  419. 099C 26 04     BNE    $09A2       
  420. 099E 3F 02     CLR    $02           portc = 0;
  421. 09A0 20 07     BRA    $09A9           else
  422. 09A2 BE 50     LDX    $50              portc = ( lcdtab[digit[0]] );     /* 100's digit */
  423. 09A4 D6 08 00  LDA    $0800,X     
  424. 09A7 B7 02     STA    $02         
  425. 09A9 3D 50     TST    $50               if ( digit[0] == 0 && digit[1] == 0 )
  426. 09AB 26 08     BNE    $09B5       
  427. 09AD 3D 51     TST    $51         
  428. 09AF 26 04     BNE    $09B5       
  429. 09B1 3F 01     CLR    $01                 portb=0;
  430. 09B3 20 07     BRA    $09BC                 else
  431. 09B5 BE 51     LDX    $51                     portb = ( lcdtab[digit[1]] );      /* 10's digit */
  432. 09B7 D6 08 00  LDA    $0800,X     
  433. 09BA B7 01     STA    $01         
  434. 09BC BE 52     LDX    $52                       porta = ( lcdtab[digit[2]]+1 );   /* 1's digit + decimal point */
  435. 09BE D6 08 00  LDA    $0800,X     
  436. 09C1 4C        INCA               
  437. 09C2 B7 00     STA    $00         
  438. 09C4 9A        CLI                CLI;
  439. 09C5 CD 08 17  JSR    $0817                   delay();
  440. 09C8 81        RTS                }
  441.  
  442.                                   /****************************************************************/
  443.  
  444.                                   void display_psi(void)
  445.                                   /* At power-up it is assumed that the pressure port of the sensor
  446.                                      is open to atmosphere. The code in initio() delays for the
  447.                                      sensor and power to stabilize. One hundred A/D conversions are
  448.                                      averaged and divided by 100. The result is called xdcr_offset.
  449.                                      This routine calls the A/D routine which performs one hundred
  450.                                      conversions, divides the result by 100 and returns the value.
  451.                                      If the value returned is less than or equal to the xdcr_offset,
  452.                                      the value of xdcr_offset is substituted. If the value returned
  453.                                      is greater than xdcr_offset, xdcr_offset is subtracted from the
  454.                                      returned value. That result is multiplied by a constant to yield
  455.                                      pressure in PSI * 10 to yield a "decimal point".
  456.                                   */
  457.                                   {
  458.                                    while(1)
  459.                                      {
  460. 09C9 3F 59     CLR    $59         slope = 64;
  461. 09CB A6 40     LDA    #$40        
  462. 09CD B7 5A     STA    $5A         
  463. 09CF B6 03     LDA    $03              k = portd & 0xc0;  /* this lets us "rubber" the slope to closer fit
  464. 09D1 A4 C0     AND    #$C0        
  465. 09D3 B7 62     STA    $62         
  466.                                                              the slope of the sensor */
  467. 09D5 A1 80     CMP    #$80              if ( k == 0x80 )    /* J2 removed, J1 installed */
  468. 09D7 26 06     BNE    $09DF       
  469. 09D9 3F 59     CLR    $59                 slope = 65;
  470. 09DB A6 41     LDA    #$41        
  471. 09DD B7 5A     STA    $5A         
  472. 09DF B6 62     LDA    $62                  if ( k == 0x40 ) /* J1 removed, J2 installed */
  473.  
  474. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE  9
  475.  
  476.  
  477. 09E1 A1 40     CMP    #$40        
  478. 09E3 26 06     BNE    $09EB       
  479. 09E5 3F 59     CLR    $59                    slope = 63;
  480. 09E7 A6 3F     LDA    #$3F        
  481. 09E9 B7 5A     STA    $5A         
  482.                                    /* else both jumpers are removed or installed... don't change the slope */
  483. 09EB CD 08 37  JSR    $0837            atodtemp = read_a2d();  /* atodtemp = raw a/d ( 0..255 ) */
  484. 09EE 3F 55     CLR    $55         
  485. 09F0 B7 56     STA    $56         
  486. 09F2 B0 5D     SUB    $5D                if ( atodtemp <= xdcr_offset )
  487. 09F4 B7 58     STA    $58         
  488. 09F6 B6 5C     LDA    $5C         
  489. 09F8 A8 80     EOR    #$80        
  490. 09FA B7 57     STA    $57         
  491. 09FC B6 55     LDA    $55         
  492. 09FE A8 80     EOR    #$80        
  493. 0A00 B2 57     SBC    $57         
  494. 0A02 BA 58     ORA    $58         
  495. 0A04 22 08     BHI    $0A0E       
  496. 0A06 B6 5C     LDA    $5C                  atodtemp = xdcr_offset;
  497. 0A08 B7 55     STA    $55         
  498. 0A0A B6 5D     LDA    $5D         
  499. 0A0C B7 56     STA    $56         
  500. 0A0E B6 56     LDA    $56                atodtemp -=  xdcr_offset; /* remove the offset */
  501. 0A10 B0 5D     SUB    $5D         
  502. 0A12 B7 56     STA    $56         
  503. 0A14 B6 55     LDA    $55         
  504. 0A16 B2 5C     SBC    $5C         
  505. 0A18 B7 55     STA    $55         
  506. 0A1A B6 56     LDA    $56               atodtemp *= slope; /* convert to psi */
  507. 0A1C B7 58     STA    $58         
  508. 0A1E B6 55     LDA    $55         
  509. 0A20 B7 57     STA    $57         
  510. 0A22 B6 59     LDA    $59         
  511. 0A24 B7 66     STA    $66         
  512. 0A26 B6 5A     LDA    $5A         
  513. 0A28 B7 67     STA    $67         
  514. 0A2A CD 0A 3F  JSR    $0A3F       
  515. 0A2D BF 55     STX    $55         
  516. 0A2F B7 56     STA    $56         
  517. 0A31 CD 08 FE  JSR    $08FE            cvt_bin_dec( atodtemp ); /* convert to decimal and display */
  518. 0A34 20 93     BRA    $09C9          }
  519. 0A36 81        RTS                }
  520.  
  521.                                   /***************************************************************************/
  522.  
  523.                                   main()
  524.                                   {
  525. 0A37 CD 08 CE  JSR    $08CE        initio(); /* set-up the processor's i/o */
  526. 0A3A AD 8D     BSR    $09C9         display_psi();
  527. 0A3C 20 FE     BRA    $0A3C          while(1);   /* should never get here */
  528. 0A3E 81        RTS                }
  529.                                   
  530. 0A3F BE 58     LDX    $58         
  531. 0A41 B6 67     LDA    $67         
  532.  
  533. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE 10
  534.  
  535.  
  536. 0A43 42        MUL               
  537. 0A44 B7 70     STA    $70         
  538. 0A46 BF 71     STX    $71         
  539. 0A48 BE 57     LDX    $57         
  540. 0A4A B6 67     LDA    $67         
  541. 0A4C 42        MUL               
  542. 0A4D BB 71     ADD    $71         
  543. 0A4F B7 71     STA    $71         
  544. 0A51 BE 58     LDX    $58         
  545. 0A53 B6 66     LDA    $66         
  546. 0A55 42        MUL               
  547. 0A56 BB 71     ADD    $71         
  548. 0A58 B7 71     STA    $71         
  549. 0A5A 97        TAX                
  550. 0A5B B6 70     LDA    $70         
  551. 0A5D 81        RTS                
  552.                                   
  553. 0A5E 3F 70     CLR    $70         
  554. 0A60 5F        CLRX               
  555. 0A61 3F 6E     CLR    $6E         
  556. 0A63 3F 6F     CLR    $6F         
  557. 0A65 5C        INCX               
  558. 0A66 38 58     LSL    $58         
  559. 0A68 39 57     ROL    $57         
  560. 0A6A 39 6E     ROL    $6E         
  561. 0A6C 39 6F     ROL    $6F         
  562. 0A6E B6 6E     LDA    $6E         
  563. 0A70 B0 67     SUB    $67         
  564. 0A72 B7 6E     STA    $6E         
  565. 0A74 B6 6F     LDA    $6F         
  566. 0A76 B2 66     SBC    $66         
  567. 0A78 B7 6F     STA    $6F         
  568. 0A7A 24 0D     BCC    $0A89       
  569. 0A7C B6 67     LDA    $67         
  570. 0A7E BB 6E     ADD    $6E         
  571. 0A80 B7 6E     STA    $6E         
  572. 0A82 B6 66     LDA    $66         
  573. 0A84 B9 6F     ADC    $6F         
  574. 0A86 B7 6F     STA    $6F         
  575. 0A88 99        SEC                
  576. 0A89 59        ROLX               
  577. 0A8A 39 70     ROL    $70         
  578. 0A8C 24 D8     BCC    $0A66       
  579. 0A8E 81        RTS                
  580. 0A8F 53        COMX               
  581. 0A90 9F        TXA                
  582. 0A91 BE 70     LDX    $70         
  583. 0A93 53        COMX               
  584. 0A94 81        RTS                
  585. 1FFE 0A 37                        
  586.  
  587. 6805 'C' COMPILER ß3.36  14-Feb-1991                                    PAGE 11
  588.  
  589.  
  590.  
  591.  
  592. SYMBOL TABLE
  593.  
  594. LABEL        VALUE  LABEL        VALUE  LABEL        VALUE  LABEL        VALUE  
  595.  
  596. IRQ          0813 | SCI          0816 | TIMERCAP     0814 | TIMERCMP     089B 
  597. TIMEROV      0815 | __LDIV       0A5E | __LongIX     0066 | __MUL        0000 
  598. __MUL16x16   0A3F | __RDIV       0A8F | __RESET      1FFE | __STARTUP    0000 
  599. __STOP       0000 | __SWI        0812 | __WAIT       0000 | __longAC     0057 
  600. acnthi       001A | acntlo       001B | adcnt        005B | addata       0008 
  601. adstat       0009 | adzero       08A4 | arg          0069 | atodtemp     0055 
  602. b            0000 | bothbytes    0002 | cvt_bin_dec  08FE | ddra         0004 
  603. ddrb         0005 | ddrc         0006 | dectable     080A | delay        0817 
  604. digit        0050 | display_psi  09C9 | eeclk        0007 | fixcompare   0880 
  605. hi           0000 | i            005E | icaphi1      0014 | icaphi2      001C 
  606. icaplo1      0015 | icaplo2      001D | initio       08CE | isboth       0002 
  607. j            0060 | k            0062 | l            0000 | lcdtab       0800 
  608. lo           0001 | main         0A37 | misc         000C | ocmphi1      0016 
  609. ocmphi2      001E | ocmplo1      0017 | ocmplo2      001F | plma         000A 
  610. plmb         000B | porta        0000 | portb        0001 | portc        0002 
  611. portd        0003 | q            0063 | read_a2d     0837 | scibaud      000D 
  612. scicntl1     000E | scicntl2     000F | scidata      0011 | scistat      0010 
  613. slope        0059 | tcnthi       0018 | tcntlo       0019 | tcr          0012 
  614. tsr          0013 | xdcr_offset  005C | 
  615.  
  616.  
  617. MEMORY USAGE MAP ('X' = Used, '-' = Unused)
  618.  
  619. 0100 : ---------------- ---------------- ---------------- ----------------
  620. 0140 : ---------------- ---------------- ---------------- ----------------
  621. 0180 : ---------------- ---------------- ---------------- ----------------
  622. 01C0 : ---------------- ---------------- ---------------- --------------X-
  623.  
  624. 0800 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  625. 0840 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  626. 0880 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  627. 08C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  628.  
  629. 0900 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  630. 0940 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  631. 0980 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  632. 09C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  633.  
  634. 0A00 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  635. 0A40 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
  636. 0A80 : XXXXXXXXXXXXXXXX XXXXX----------- ---------------- ----------------
  637. 0AC0 : ---------------- ---------------- ---------------- ----------------
  638.  
  639. 1F00 : ---------------- ---------------- ---------------- ----------------
  640. 1F40 : ---------------- ---------------- ---------------- ----------------
  641. 1F80 : ---------------- ---------------- ---------------- ----------------
  642. 1FC0 : ---------------- ---------------- ---------------- --XXXXXXXXXXXXXX
  643.  
  644. All other memory blocks unused.
  645.  
  646.  
  647.  
  648. Errors             :    0
  649. Warnings           :    0
  650.  
  651.  
  652.